package com.liunian.algorithmstudy.dynamic.palindrome;

public class CountSubstrings647 {

	/**
	 给你一个字符串 s ，请你统计并返回这个字符串中 回文子串 的数目。
	 回文字符串 是正着读和倒过来读一样的字符串。
	 子字符串 是字符串中的由连续字符组成的一个序列。

	 示例 1：
	 输入：s = "abc"
	 输出：3
	 解释：三个回文子串: "a", "b", "c"

	 示例 2：
	 输入：s = "aaa"
	 输出：6
	 解释：6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
	 */
	public int countSubstrings(String s) {
		boolean[][] dp = new boolean[s.length()][s.length()];
		int res = 0;
		for (int i = s.length() - 1; i >= 0; i--) {
			for (int j = i; j < s.length(); j++) {
				if (s.charAt(i) == s.charAt(j)) {
					if (j - i <= 1) {
						dp[i][j] = true;
						res++;
					} else if (dp[i + 1][j - 1]) {
						dp[i][j] = true;
						res++;
					}
				}
			}
		}
		return res;
	}

	public static void main(String[] args) {
		CountSubstrings647 countSubstrings647 = new CountSubstrings647();
		System.out.println(countSubstrings647.countSubstrings("fdsklf"));
	}

}
